
(30 insts)

0338b4  27 bd ff d8  addiu sp, sp, -40     stack frame 40 bytes
0338b8  af bf 00 14  sw    ra, sp, 20      save return addr
0338bc  af a4 00 28  sw    a0, sp, 40      [sp + 40] = a0
0338c0  af a5 00 2c  sw    a1, sp, 44      [sp + 44] = a1
0338c4  af a6 00 30  sw    a2, sp, 48      [sp + 48] = a2
0338c8  af a0 00 24  sw    r0, sp, 36      [sp + 36] = 0
0338cc  8f ae 00 30  lw    t6, sp, 48      t6 = [sp + 48]     t6 = a2
0338d0  8f af 00 2c  lw    t7, sp, 44      t7 = [sp + 44]     t7 = a1
0338d4  24 01 ff f0  addiu at, r0, 0xfff0  at = 0xfffffff0 
0338d8  01 cf c0 23  subu  t8, t6, t7      t8 = t6 - t7       t8 = a2 - a1
0338dc  27 19 00 0f  addiu t9, t8, 15      t9 = t8 + 15       t9 = a2 - a1 + 15
0338e0  03 21 40 24  and   r8, t9, at      r8 = t9 & at       r8 = (a2 - a1 + 15) & 0xfffffff0
0338e4  af a8 00 20  sw    r8, sp, 32      [sp + 32] = r8     [sp + 32] = (a2 - a1 + 15) & 0xfffffff0
0338e8  8f a4 00 20  lw    a0, sp, 32      a0 = [sp + 32]     
0338ec  0c 09 e0 48  jal 0x9e048 * 4       0x80278120([sp + 32], 1);
0338f0  24 05 00 01  addiu a1, r0, 1       a1 = 1
0338f4  af a2 00 1c  sw    v0, sp, 28      [sp + 28] = v0
0338f8  8f a9 00 1c  lw    t1, sp, 28      t1 = [sp + 28]
0338fc  25 2a 00 04  addiu t2, t1, 4       t2 = t1 + 4        t2 = [sp + 28] + 4
033900  af aa 00 18  sw    t2, sp, 24      [sp + 24] = t2     [sp + 24] = [sp + 28] + 4
033904  8f ab 00 1c  lw    t3, sp, 28      t3 = [sp + 28]
033908  11 60 00 11  beq   r0, t3, 17 * 4  if (![sp + 28]) return [sp + 28] (aka 0)      
03390c  00 00 00 00  nop
033910  8f a4 00 1c  lw    a0, sp, 28      a0 = [sp + 28]
033914  8f a5 00 2c  lw    a1, sp, 44      a1 = [sp + 44]
033918  0c 09 e1 41  jal 0x9e141 * 4       0x80278504([sp + 28], [sp + 44], [sp + 48])
03391c  8f a6 00 30  lw    a2, sp, 48      a2 = [sp + 48]
033920  3c 05 80 1c  lui   a1, 0x801c      a1 = 0x801c0000
033924  24 a5 10 00  addiu a1, a1, 0x1000  a1 += 0x1000       a1 = 0x801c1000
033928  0c 09 fd 38  jal uncompress        uncompress([sp + 28], 0x901c)
03392c  8f a4 00 1c  lw    a0, sp, 28      a0 = [sp + 28]
033930  3c 05 80 1c  lui   a1, 0x801c      a1 = 0x801c0000
033934  24 a5 10 00  addiu a1, a1, 0x1000  a1 += 0x1000       a1 = 0x801c1000
033938  0c 09 df b8  jal 0x9dfb8 * 4       0x80277ee0([sp + 40], 0x901c)
03393c  8f a4 00 28  lw    a0, sp, 40      a0 = [sp + 40]
033940  0c 09 e0 8e  jal 0x9e08e * 4       0x80278238([sp + 28])
033944  8f a4 00 1c  lw    a0, sp, 28      a0 = [sp + 28]
033948  10 00 00 01  beq   r0, r0, 1       no...
03394c  00 00 00 00  nop                   ...thing ???
033950  3c 02 80 1c  lui   v0, 0x801c      v0 = 0x801c0000
033954  10 00 00 03  beq   r0, r0, 3       
033958  24 42 10 00  addiu v0, v0, 0x1000  v0 += 0x1000       return 0x801c1000
03395c  10 00 00 01  beq   r0, r0, 1       XXX
033960  00 00 00 00  nop                   XXX
033964  8f bf 00 14  lw    ra, sp, 20      restore return ptr
033968  27 bd 00 28  addiu sp, sp, 40      destroy stack frame
03396c  03 e0 00 08  jr ra                 return
033970  00 00 00 00  nop

[sp+20] RETURN
[sp+24] v1
[sp+28] decomp_src
[sp+32] v3
[sp+36] v4
[sp+40] arg1
[sp+44] arg2
[sp+48] arg3


0x802788b4(arg1, arg2, arg3)
{
    v1;
    v2;
    decomp_src;
    v4 = 0;

    v3 = (arg3 - arg2 + 15) & 0xfffffff0;
    decomp_src = 0x80278120(v3, 1);
    v1 = v3 + 4;
    if (!decomp_src) {
        return 0;
    }
    0x80278504(decomp_src, arg2, arg3);
    uncompress(decomp_src, 0x801c1000);
    0x80277ee0(arg1, 0x801c1000);
    0x80278238(decomp_src);

    return 0x801c1000;
}



337d8-338b3 (37 insts)

0337d8  27 bd ff d8  addiu sp, sp, -40     set up stack frame
0337dc  af bf 00 14  sw ra, sp, 20         save return addr
0337e0  af a4 00 28  sw a0, sp, 40         [sp + 40] = a0
0337e4  af a5 00 2c  sw a1, sp, 44         [sp + 44] = a1
0337e8  af a6 00 30  sw a2, sp, 48         [sp + 48] = a2
0337ec  af a0 00 24  sw r0, sp, 36         [sp + 36] = 0
0337f0  8f ae 00 30  lw t6, sp, 48         t6 = [sp + 48]
0337f4  8f af 00 2c  lw t7, sp, 44         t7 = [sp + 44]
0337f8  24 01 ff f0  addiu at, r0, 0xfff0  at = 0xfffffff0
0337fc  01 cf c0 23  subu t8, t6, t7       t8 = t6 - t7   t8 = [sp + 48] - [sp + 44] 
033800  27 19 00 0f  addiu t9, t8, 15      t9 = t8 + 15   t9 = [sp + 48] - [sp + 44] + 15
033804  03 21 40 24  and t0, t9, at        t0 = t9 & at   t0 = ([sp + 48] - [sp + 44] + 15) & 0xfffffff0
033808  af a8 00 20  sw t0, sp, 32         [sp + 32] = t0
03380c  8f a4 00 20  lw a0, sp, 32         a0 = [sp + 32]
033810  0c 09 e0 48  jal 0x9e048 * 4       0x80278120([sp + 32], 1)
033814  24 05 00 01  addiu a1, r0, 1       a1 = 1
033818  af a2 00 1c  sw v0, sp, 28         [sp + 28] = v0
03381c  8f a9 00 1c  lw t1, sp, 28         t1 = [sp + 28]
033820  25 2a 00 04  addiu t2, t1, 4       t2 = t1 + 4    
033824  af aa 00 18  sw t2, sp, 24         [sp + 24] = t2   [sp + 24] = [sp + 28] + 4
033828  8f ab 00 1c  lw t3, sp, 28         t3 = [sp + 28]
03382c  11 60 00 19  beq r0, t3, 25        if (![sp + 28]) return [sp + 28]
033830  00 00 00 00  nop
033834  8f a4 00 1c  lw a0, sp, 28         a0 = [sp + 28]
033838  8f a5 00 2c  lw a1, sp, 44         a1 = [sp + 44]
03383c  0c 09 e1 41  jal 9e141 * 4         *80278504([sp + 28], [sp + 44], [sp + 48]);
033840  8f a6 00 30  lw a2, sp, 48         a2 = [sp + 48]
033844  8f ac 00 18  lw t4, sp, 24         t4 = [sp + 24]
033848  00 00 28 25  or a1, r0, r0         a1 = 0
03384c  0c 09 e0 48  jal 9e048 * 4         *80278120(*[sp + 24], 0)
033850  8d 84 00 00  lw a0, t4, 0          a0 = *t4
033854  af a2 00 24  sw v0, sp, 36         [sp + 36] = v0
033858  8f ad 00 24  lw t5, sp, 36         t5 = [sp + 36]
03385c  11 a0 00 0b  beq r0, t5, 11        if (![sp + 36]) return [sp + 36];
033860  00 00 00 00  nop
033864  8f a4 00 1c  lw a0, sp, 28         a0 = [sp + 28]
033868  0c 09 fd 38  jal uncompress        uncompress([sp + 28], [sp + 36])
03386c  8f a5 00 24  lw a1, sp, 36         a1 = [sp + 36]
033870  8f a4 00 28  lw a0, sp, 40         a0 = [sp + 40]
033874  0c 09 df b8  jal 9dfb8 * 4         *80277ee0([sp + 40], [sp + 36])
033878  8f a5 00 24  lw a1, sp, 36         a1 = [sp + 36]
03387c  0c 09 e0 8e  jal 9e08e * 4         *80278238([sp + 28])
033880  8f a4 00 1c  lw a0, sp, 28         a0 = [sp + 28]
033884  10 00 00 01  beq r0, r0, 1
033888  00 00 00 00  label2: nop
03388c  10 00 00 01  beq r0, r0, 1
033890  00 00 00 00  nop
033894  10 00 00 03  beq r0, r0, 3
033898  8f a2 00 24  lw v0, sp, 36         v0 = [sp + 36]
03389c  10 00 00 01  beq r0, r0, 1
0338a0  00 00 00 00  nop
0338a4  8f bf 00 14  lw ra, sp, 20         restore return address
0338a8  27 bd 00 28  sp, sp, 40            destroy stack frame
0338ac  03 e0 00 08  jr ra                 return
0338b0  00 00 00 00  nop                   delay slot

[sp + 20] RETURN
[sp + 24] v1
[sp + 28] decomp_src 
[sp + 32] v3
[sp + 36] decomp_dst
[sp + 40] arg1
[sp + 44] arg2
[sp + 48] arg3

0x802787d8(arg1, arg2, arg3)
{
    decomp_dst = 0;

    v3 = (arg3 - arg2 + 15) & 0xfffffff0;
    decomp_src = 0x80278120(v3, 1);
    v1 = decomp_src + 4;
    if (!decomp_src) {
        return 0;
    }
    0x80278504(decomp_src, arg2, arg3);
    decomp_dst = 0x80278120(*v1, 0);
    if (!decomp_dst) {
        return 0;
    }
    uncompress(decomp_src, decomp_dst);
    0x80277ee0(arg1, decomp_dst);
    0x80278238(decomp_src);

    return decomp_dst;
}
    
